package com.freemypay.test.阿里java开发手册.编程规范.集合处理;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.junit.Test;

/**
 * 集合处理
 * @author yesixian
 * @date 2018年5月11日
 */
public class 集合处理 {
	
	/**
	 * List 的toArray()测试
	 */
	@Test
	public void testListToArray () {
		// 1.toArray带参
		/*ArrayList<String> arrayList = new ArrayList<>(2);
		arrayList.add("yin");
		arrayList.add("jia");
		String[] strs = new String[arrayList.size()];
		strs = arrayList.toArray(strs);
		for (String string : strs) {
			System.out.println(string);
		}*/
		
		// 2.toArray不带参
		ArrayList<String> list = new ArrayList<>();
		list.add("free");
		list.add("my");
		list.add("pay");
		// 强转为其他类型ClassCastException 错误
		String[] array = (String[]) list.toArray();
		for (String string : array) {
			System.out.println(string);
		}
	}
	
	/**
	 * array转list
	 */
	@Test
	public void testArrayToList() {
		String[] strs = {"free", "my", "pay"};
		List<String> asList = Arrays.asList(strs);
		// 运行时异常 UnsupportedOperationException
//		asList.add("yinjian");
		// asList.get(0)也会变
		strs[0] = "com";
		for (String string : asList) {
			System.out.println(string);
		}
	}
	
	/**
	 * 【强制】泛型通配符<?  extends T >来接收返回的数据，此写法的泛型集合不能使用 add 方法，而 <? super T> 不能使用 get 方法
	 * ，做为接口调用赋值时易出错。说明：扩展说一下 PECS(Producer Extends Consumer Super) 
	 * 原则：第一、频繁往外读取内容的，适合用<?  extends T >。第二、经常往里插入的，适合用 <? super T> 。
	 */
	@Test
	public void test泛型() {
		
	}
	
	/**
	 * map遍历方式
	 */
	@Test
	public void testMap遍历() {
		Map<String, String> map = new HashMap<>();
		map.put("1", "zs");
		map.put("2", "ls");
		map.put("3", "ww");
		// 1.keyset 效率低
		/*Set<String> keySet = map.keySet();
		Iterator<String> keyIterator = keySet.iterator();
		while(keyIterator.hasNext()) {
			String key = keyIterator.next();
			System.out.println(map.get(key));
		}*/
		
		// 2.entrySet 遍历一次，将key和value放入entry中，效率高
		/*Set<Entry<String, String>> entrySet = map.entrySet();
		Iterator<Entry<String, String>> iterator = entrySet.iterator();
		while(iterator.hasNext()) {
			Entry<String, String> next = iterator.next();
			System.out.println(next.getValue());
		}*/
		
		// 3.jdk1.8 forEach简写
//		map.forEach((k,v)-> System.out.println("key: " + k + "value: " + v));
		
		// 4.jdk1.8 forEach 判断
		map.forEach((k,v)-> {
			System.out.println("key: " + k + "value: " + v);
			if("2".equals(k)) {
				System.out.println(v);
			}
		});
	}
	
	
}
